23991
10672
Olen jättänyt JSONin kanssa jonkin aikaa, vain työnnän sen tekstiksi ja se ei ole vahingoittanut ketään (tiedän), mutta haluaisin aloittaa asioiden tekemisen oikein.
Olen nähnyt niin monia väitettyjä "standardeja" JSON-sisältötyypille:
sovellus / Json
application / x-javascript
teksti / javascript
teksti / x-javascript
teksti / x-json
Mutta kumpi on oikea tai paras? Katson, että niiden välillä on tietoturva- ja selaintukikysymyksiä.
Tiedän, että on samanlainen kysymys, mikä MIME-tyyppi, jos REST-sovellusliittymä palauttaa JSON: n, mutta haluaisin hieman kohdennetun vastauksen. 
1
2
Seuraava
JSON-teksti:
sovellus / Json
JSON-tekstin MIME-mediatyyppi on application / json. Oletuskoodaus on UTF-8. (Lähde: RFC 4627).
JSONP (suoritettava JavaScript), jossa on takaisinsoitto:
sovellus / javascript
Tässä on joitain blogiviestejä, jotka mainittiin asiaankuuluvissa kommenteissa:
Miksi sinun ei pitäisi käyttää tekstiä / html: ää JSON: lle
Internet Explorerilla on joskus ongelmia sovelluksessa / json
Melko täydellinen luettelo mimetyypeistä ja mihin niitä käytetään
IANA: n virallinen miimityyppiluettelo @ gnrfanin alla olevasta vastauksesta
|
IANA on rekisteröinyt JSON: n virallisen MIME-tyypin sovellukseksi / json.
Kysyttäessä miksi ei tekstiä / jsonia, Crockford näyttää sanoneen, että JSON ei ole oikeastaan ​​JavaScripti eikä teksti, ja myös IANA jakoi todennäköisemmin sovelluksen / * kuin teksti / *.
Lisää resursseja:
Mediatyypit
Kommenttipyyntö 4627
bluesmoon: JSONilla on tyyppi
|
JSON:
Sisältötyyppi: application / json
JSON-P:
Content-Type: sovellus / javascript
|
Tietysti oikea MIME-mediatyyppi JSON: lle on application / json, mutta on välttämätöntä ymmärtää, minkä tyyppisiä tietoja sovelluksessasi odotetaan.
Käytän esimerkiksi Ext GWT: tä ja palvelimen vastauksen on oltava teksti / html, mutta sisältää JSON-tietoja.
Asiakkaan puoli, Ext GWT -lomakkeen kuuntelija
uploadForm.getForm (). addListener (uusi FormListenerAdapter ()
{
@Ohittaa
public void onActionFailed (Lomakelomake, int httpStatus, String responseText)
{
MessageBox.alert ("Virhe");
}
@Ohittaa
public void onActionComplete (Lomakelomake, int httpStatus, String responseText)
{
MessageBox.alert ("Menestys");
}
});
Jos käytät sovelluksen / JSON-vastaustyyppiä, selain ehdottaa, että tallennan tiedoston.
Palvelinpuolen lähdekoodikatkelma kevään MVC: n avulla
palauta uusi AbstractUrlBasedView ()
{
@SuppressWarnings ("tarkistamaton")
@Ohittaa
protected void renderMergedOutputModel (Karttamalli, HttpServletRequest-pyyntö,
HttpServletResponse response) heittää poikkeuksen
{
response.setContentType ("teksti / html");
response.getWriter (). write (json);
}
};
|
JSON:
Vastaus on dynaamisesti tuotettua tietoa URL-osoitteessa välitettyjen kyselyparametrien mukaan.
Esimerkki:
{"Nimi": "Foo", "Id": 1234, "Sijoitus": 7}
Sisältötyyppi: application / json
JSON-P:
JSON pehmusteella.
Vastaus on JSON-dataa, jonka ympärille on kiedottu toimintokutsu.
Esimerkki:
functionCall ({"Nimi": "Foo", "Id": 1234, "Sijoitus": 7});
Content-Type: sovellus / javascript
|
Jos käytät Ubuntua tai Debiania ja palvelet .json-tiedostoja Apachen kautta, saatat haluta palvella tiedostoja oikealla sisältötyypillä. Teen tämän ensisijaisesti siksi, että haluan käyttää Firefox-laajennusta JSONView
Apache-moduuli mod_mime auttaa tekemään tämän helposti. Ubuntun kanssa sinun on kuitenkin muokattava tiedostoa /etc/mime.types ja lisättävä rivi
sovellus / Json Json
Käynnistä sitten Apache uudelleen:
sudo service apache2 käynnistetään uudelleen
|
Jos soitat ASP.NET-verkkopalveluihin asiakaspuolelta, sinun on käytettävä sovellusta / json toimiakseen. Uskon, että tämä on sama jQuery- ja Ext-kehyksille.
|
Oikea JSON-sisältötyyppi on application / json, JOS et käytä JSONP: ää, joka tunnetaan myös nimellä JSON with Padding, mikä on itse asiassa JavaScriptiä, joten oikea sisältötyyppi olisi application / javascript.
|
Ei ole epäilystäkään siitä, että application / json on paras MIME-tyyppi JSON-vastaukselle.
Mutta minulla oli jonkin verran kokemusta siitä, että jouduin käyttämään application / x-javascriptia joidenkin pakkausongelmien vuoksi. Hosting-ympäristöni on jaettu isännöinti GoDaddyn kanssa. He eivät salli minun muuttaa palvelimen kokoonpanoja. Olin lisännyt seuraavan koodin web.config-tiedostooni vastausten pakkaamiseksi.
















Tätä käyttämällä .aspx-sivut pakattiin g-zipillä, mutta JSON-vastaukset eivät. lisäsin

staattisten ja dynaamisten tyyppien osioissa. Mutta tämä ei pakkaa JSON-vastauksia lainkaan.
Sen jälkeen poistin tämän äskettäin lisätyn tyypin ja lisäsin

sekä staattisten että dynaamisten tyyppien osioissa, ja muutti vastaustyyppiä
.ashx (asynkroninen käsittelijä) -
application / x-javascript
Ja nyt huomasin, että JSON-vastaukseni pakattiin g-zipillä. Joten suosittelen henkilökohtaisesti käyttöä
application / x-javascript
vain, jos haluat pakata JSON-vastauksesi jaettuun hosting-ympäristöön. Koska jaetussa hostingissa ne eivät salli sinun muuttaa IIS: ääkokoonpanot.
|
Vasta käytettäessä sovellusta / json MIME-tyypinä minulla on seuraavat (marraskuusta 2011 lähtien uusimmilla Chrome-versioilla, Firefox ja Firebug):
Ei enää varoituksia Chromelta, kun JSON ladataan palvelimelta.
Firebug lisää vastaukseen välilehden, joka näyttää JSON-tiedot
alustettu. Jos MIME-tyyppi on erilainen, se näkyy vain nimellä
'Vastaussisältö'.
|
Kaikki ei toimi sisältötyyppisovelluksessa / JSON.
Jos käytät tiedostojen lähettämiseen Ext JS -lomakkeen lähetystä, muista, että selain jäsentää palvelimen vastauksen